package com.xueshandai.db.migration.tool;

import org.apache.log4j.Logger;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

/**
 * Created by Zetas on 2014/12/12.
 */
public class FileUtil {
    static Logger logger = Logger.getLogger(FileUtil.class.toString());

    public static String getCurrentOperatingPath() {
        return System.getProperty("user.dir");
    }

    /**
     * 在软件运行目录创建一个temp目录，如果已经存在返回true，如果不存在创建成功返回true，如果创建失败返回false
     * @return
     */
    public static boolean makeTempDirInUserDir() {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "temp");
        if (directory.exists()) {
            if (directory.isDirectory()) {
                return true;
            } else {
                logger.info("创建temp目录成功");
                return directory.mkdir();
            }
        } else {
            logger.info("创建temp目录成功");
            return directory.mkdir();
        }
    }

    /**
     * 在软件运行目录的temp目录下创建指定的文件
     * 如果不存在就创建一个，并返回创建好的虚拟文件
     * 如果存在就把存在的文件删除，重新创建一个，并返回创建好的虚拟文件
     * 如果创建失败就返回空
     * @param fileName
     * @return
     */
    public static File createFileInTempDirInUserDir(String fileName) {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "temp");
        File file = new File(directory, fileName);

        if (file.exists()) {
            logger.info("删除文件："+file.getAbsolutePath());
            file.delete();
        }

        boolean result = false;

        try {
            logger.info("创建文件："+file.getAbsolutePath());
            result = file.createNewFile();
        } catch (IOException e) {
            logger.error(e);
        }

        if (result) {
            return file;
        } else {
            return null;
        }
    }

    /**
     * 在程序运行目录中的temp目录中找到对应文件名的文件
     * @param fileName
     * @return
     */
    public static File getFileInTempDirInUserDir(String fileName) {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "temp");
        File file = new File(directory, fileName);
        if (file.exists()) {
            return file;
        } else {
            return null;
        }
    }

    /**
     * 在软件运行目录的conf目录下创建指定的文件
     * 如果不存在就创建一个，并返回创建好的虚拟文件
     * 如果存在就把存在的文件删除，重新创建一个，并返回创建好的虚拟文件
     * 如果创建失败就返回空
     * @param fileName
     * @return
     */
    public static File createFileInConfDirInUserDir(String fileName) {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "conf");
        File file = new File(directory, fileName);

        if (file.exists()) {
            logger.info("删除文件："+file.getAbsolutePath());
            file.delete();
        }

        boolean result = false;

        try {
            logger.info("创建文件："+file.getAbsolutePath());
            result = file.createNewFile();
        } catch (IOException e) {
            logger.error(e);
        }

        if (result) {
            return file;
        } else {
            return null;
        }
    }

    /**
     * 在程序运行目录中的conf目录中找到对应文件名的文件
     * @param fileName
     * @return
     */
    public static File getFileInConfDirInUserDir(String fileName) {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "conf");
        File file = new File(directory, fileName);
        if (file.exists()) {
            return file;
        } else {
            return null;
        }
    }

    /**
     * 在程序运行目录中的conf目录中找到所有符合过滤器规则的文件，并包装成一个列表返回
     * 如果传入的是空值，就返回整个conf目录下的文件列表
     * @return
     */
    public static List<File> getFileListInConfDirInUserDir() {
        String currentPath = getCurrentOperatingPath();
        File currentDirectory = new File(currentPath);
        File directory = new File(currentDirectory, "conf");
        List<File> fileLinkedList = new LinkedList<File>();

        if (directory != null) {
            File[] fileList = directory.listFiles();
            for (File file : fileList) {
                fileLinkedList.add(file);
            }
        }

        return fileLinkedList;
    }

}
